fn main() {
	// the type of an array is determined by the first element
	int_arr := [1, 2, 3]  // an array of ints([]int)
	str_arr := ['a', 'b'] // an array of strings([]string)
	u8_arr := [u8(16), 32, 64, 128] // explicitly specify the type for the first element
	
	// for very large or empty arrays
	// len, cap and init are optional
	// len defaults to 0 and init to the default initialization of the element type
	// the runtime makes sure that the capacity is not smaller than len
	mut a := []int{len: 10000, cap: 30000, init:3}
	arr := []int{len: 5, init: -1}
	users := []int{}

	// initialize the array by accessing the `it` variable which gives the index
	count := []int{len: 4, init: it}
	assert count == [0, 1, 2, 3]

	mut square := []int{len: 6, init: it * it}
	assert square == [0, 1, 4, 9, 16, 25]
}
